package principal.programa;

import exceptions.ForaDoLimiteException;
import gui.GUI;
import gui.Tela;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

import leitores.LeitorCamera;
import leitores.LeitorIluminacao;
import leitores.LeitorObjeto;
import principal.Camera;
import principal.Cena;
import principal.Luz;
import principal.Objeto;
import principal.Ponto;
import principal.Triangulo;
import principal.Vetor;

public class Programa {
	
	public static void main(String[] args) {
		try 
		{			
			LeitorObjeto leitorObjeto = new LeitorObjeto("res//calice2.byu");
			
			int qtdP = leitorObjeto.readNumeroPontos();
			int qtdT = leitorObjeto.readNumeroTriangulos();
			Objeto objeto = new Objeto(qtdP,qtdT,leitorObjeto.readPontos(qtdP),leitorObjeto.readTriangulos(qtdT));
			
			Vetor normal;
			
			for (int j = 0 ; j < objeto.getQtdTriangulo() ; j++){			
				
				objeto.getTrianguloEntrada().get(j).calcularVetorNormal(objeto.getPontosEntrada());
				
				normal = objeto.getTrianguloEntrada().get(j).getNormal();
				
				objeto.getPontosEntrada().get(objeto.getTrianguloEntrada().get(j).getVertice1()-1).adicionaComponenteNormal(normal);
				objeto.getPontosEntrada().get(objeto.getTrianguloEntrada().get(j).getVertice2()-1).adicionaComponenteNormal(normal);
				objeto.getPontosEntrada().get(objeto.getTrianguloEntrada().get(j).getVertice3()-1).adicionaComponenteNormal(normal);
			}
			
			LeitorCamera leitorCamera = new LeitorCamera("res//camera.txt");
			
			Ponto origem = leitorCamera.readPontoCamera();
			Vetor n = leitorCamera.readVetorN();
			Vetor v = leitorCamera.readVetorV();
			double distancia = leitorCamera.readDistancia();
			double hx = leitorCamera.readHx();
			double hy = leitorCamera.readHy();
			Camera camera = new Camera(origem, n, v, distancia, hx, hy);
			
			//System.out.println(origem.getX() + " " + n.getModulo() + " " + distancia + " " + hx + " " + hy);
			
			LeitorIluminacao leitorIluminacao = new LeitorIluminacao("res//iluminacao.txt");
			Luz luz = new Luz();
			luz.setPontoLuz(leitorIluminacao.readPontoLuz());
			luz.setReflexaoAmbiental(leitorIluminacao.readRflxAmbiental());
			luz.setCorAmbiental(leitorIluminacao.readVetorCorAmbiental());
			luz.setParteDifusa(leitorIluminacao.readParteDifusa());
			luz.setParteEspecular(leitorIluminacao.readParteEspecular());
			luz.setCorFonteLuz(leitorIluminacao.readCorFonteLuz());
			luz.setRugosidade(leitorIluminacao.readConstanteRugosidade());
			
			Cena cena = new Cena(objeto, camera, luz);
			Tela tela = new Tela(cena);
			GUI gui = new GUI(tela);
					
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ForaDoLimiteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}
